Add/fix track support for GPilotS. From Bernhard Spinnler.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 3 Dec 2004 23:51:26 +0000 (23:51 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 3 Dec 2004 23:51:26 +0000 (23:51 +0000)
gpsbabel/Makefile
gpsbabel/gpilots.c
gpsbabel/mingw/wintesto.cmd
gpsbabel/reference/track/TrkDB-GPil.pdb [new file with mode: 0644]

index f0fc695e7a00260e1e6f4c71bb6e0fca48c1d163..5b51336eaba8847f883390fac0b267c55c2f136e 100644 (file)
@@ -89,8 +89,8 @@ dep:
        (echo -n "internal_styles.c: mkstyle.sh " ; echo style/*.style ; /bin/echo -e '\t./mkstyle.sh > internal_styles.c || (rm -f internal_styles.c ; exit 1)' ) >> /tmp/dep
        echo Edit Makefile and bring in /tmp/dep
 
-VERSIONU=1_2_5_beta11192004
-VERSIOND=1.2.5_beta11192004
+VERSIONU=1_2_5_beta11302004-bob
+VERSIOND=1.2.5_beta11302004-bob
 #VERSIONU=1_2_4
 #VERSIOND=1.2.4
 
index 0a95644fbeaa041d310c23ab95bc8aaaca09e0f6..a5fe7fe52e4d08f3a5630708495dcd6579702a5f 100644 (file)
@@ -232,7 +232,11 @@ data_read(void)
                int lon;
                int sz;
                fi_t fi;
-                
+               int trk_num = 0;
+               int trk_seg_num = 1;
+               char trk_seg_num_buf[10];
+               char *trk_name = "";
+
                wpt_tmp = waypt_new();
 
                rec = (struct record *) pdb_rec->data;
@@ -282,9 +286,7 @@ data_read(void)
                         * CustomTrkHdr
                         */
                        case 101:
-                         track_head = route_head_alloc();
-                         track_add_head(track_head);
-                         track_head->rte_name = xstrndup(rec->wpt.CustTrkHdr.name, sizeof(rec->wpt.CustTrkHdr.name));
+                         trk_name = rec->wpt.CustTrkHdr.name;
                          sz = be_read16(&rec->wpt.CustTrkHdr.number);
               
                          /* switch between custom track points and compact track points.
@@ -294,7 +296,27 @@ data_read(void)
                          case 102:
                                tp_cust = (Custom_Trk_Point_Type *) ((char *) pdb_rec->data + sizeof(rec->header) + sizeof(rec->wpt.CustTrkHdr));
                                while (sz--) {
+                                 if ((int)(tp_cust->new_trk) == 1 || trk_seg_num == 1) {
+                                       /* 
+                                        * Start a new track segment
+                                        */
+                                       track_head = route_head_alloc();
+                                       if (trk_seg_num == 1) {
+                                         track_head->rte_name = xstrdup(trk_name);
+                                       } else {
+                                         /* name in the form TRACKNAME #n */
+                                         snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num);
+                                         track_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3);
+                                         sprintf(track_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf);
+                                       }
+                                       trk_seg_num++;
+                                       track_head->rte_num = trk_num;
+                                       trk_num++;
+                                       track_add_head(track_head);
+                                 }
+
                                  wpt_tmp = waypt_new();
+
                                  /* This is even more odd.
                                   * Track data is stored as big endian while
                                   * waypoint data is little endian!?
@@ -318,6 +340,25 @@ data_read(void)
                          case 104:
                                tp_comp = (Compact_Trk_Point_Type *) ((char *) pdb_rec->data + sizeof(rec->header) + sizeof(rec->wpt.CustTrkHdr));
                                while (sz--) {
+                                 if ((int)(tp_comp->new_trk) == 1 || trk_seg_num == 1) {
+                                       /* 
+                                        * Start a new track segment
+                                        */
+                                       track_head = route_head_alloc();
+                                       if (trk_seg_num == 1) {
+                                         track_head->rte_name = xstrdup(trk_name);
+                                       } else {
+                                         /* name in the form TRACKNAME #n */
+                                         snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num);
+                                         track_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3);
+                                         sprintf(track_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf);
+                                       }
+                                       trk_seg_num++;
+                                       track_head->rte_num = trk_num;
+                                       trk_num++;
+                                       track_add_head(track_head);
+                                 }
+
                                  wpt_tmp = waypt_new();
                                  lon = be_read32(&tp_comp->lon);
                                  lat = be_read32(&tp_comp->lat);
index e58576b30f2e3445835980f72ee06fc5e969a9f2..17447921462dd7c6470de4b7865232bfaf3b6a43 100644 (file)
@@ -582,6 +582,34 @@ REM Navicache.
 CALL :COMPARE %TMPDIR%\navi.wpt reference\navicache.ref\r
 REM \r
 \r
+REM \r
+REM CoastalExplorer..\r
+@echo on\r
+@echo Testing...\r
+%PNAME% -r -i coastexp -f reference\coastexp.nob -o gpx -F %TMPDIR%\coastexp.gpx\r
+@echo off\r
+@echo.\r
+CALL :COMPARE %TMPDIR%\coastexp.gpx reference\coastexp.ref\r
+@echo on\r
+@echo Testing...\r
+%PNAME% -r -i gpx -f %TMPDIR%\coastexp.gpx -o coastexp -F %TMPDIR%\coastexp.nob\r
+@echo off\r
+@echo.\r
+CALL :COMPARE %TMPDIR%\coastexp.nob reference\coastexp.ref2\r
+@echo on\r
+@echo Testing...\r
+%PNAME% -w -i coastexp -f reference\coastexp.nob -o gpx -F %TMPDIR%\coastexp.gpx\r
+@echo off\r
+@echo.\r
+CALL :COMPARE %TMPDIR%\coastexp.gpx reference\coastexp.ref3\r
+@echo on\r
+@echo Testing...\r
+%PNAME% -w -i gpx -f %TMPDIR%\coastexp.gpx -o coastexp -F %TMPDIR%\coastexp.nob\r
+@echo off\r
+@echo.\r
+CALL :COMPARE %TMPDIR%\coastexp.nob reference\coastexp.ref4\r
+REM \r
+\r
 REM PsiTrex.  A text format that can't be handled by XCSV due to context of\r
 REM data based on other data values in the file\r
 REM Waypoints first\r
diff --git a/gpsbabel/reference/track/TrkDB-GPil.pdb b/gpsbabel/reference/track/TrkDB-GPil.pdb
new file mode 100644 (file)
index 0000000..00c0912
Binary files /dev/null and b/gpsbabel/reference/track/TrkDB-GPil.pdb differ